// qrcode.js
// 预留二维码解析功能接口

function parseQRCode(imageData) {
  // TODO: 解析二维码，提取密钥等信息
  return {
    secret: '',
    account: '',
    type: 'TOTP'
  };
}

// qrcode.js
// 二维码解析功能，提取 otpauth 协议密钥和账户信息
// 依赖：jsQR（推荐），或浏览器原生 API

// 这里为结构演示，实际建议引入 jsQR 库
// https://github.com/cozmo/jsQR

async function parseQRCodeFromImage(imageData) {
  // imageData: HTMLImageElement 或 Canvas ImageData
  // 依赖 jsQR 进行二维码识别
  // 返回 { secret, account, type, rawText, error }
  try {
    if (typeof jsQR !== 'function') {
      return { secret: '', account: '', type: 'TOTP', rawText: '', error: 'jsQR 库未加载，请检查 libs/jsQR.min.js 是否存在且已在 popup.html 中正确引入。' };
    }
    // 1. 获取像素数据
    let imageDataObj, width, height;
    if (imageData instanceof ImageData) {
      imageDataObj = imageData;
      width = imageData.width;
      height = imageData.height;
    } else if (imageData instanceof HTMLImageElement) {
      // 创建 canvas 获取像素数据
      const canvas = document.createElement('canvas');
      canvas.width = imageData.naturalWidth || imageData.width;
      canvas.height = imageData.naturalHeight || imageData.height;
      const ctx = canvas.getContext('2d');
      ctx.drawImage(imageData, 0, 0);
      imageDataObj = ctx.getImageData(0, 0, canvas.width, canvas.height);
      width = canvas.width;
      height = canvas.height;
    } else {
      return { secret: '', account: '', type: 'TOTP', rawText: '', error: '不支持的图片类型' };
    }

    // 2. 调用 jsQR 解析二维码
    // eslint-disable-next-line no-undef
    const qrCode = jsQR(imageDataObj.data, width, height);
    if (!qrCode || !qrCode.data) {
      return { secret: '', account: '', type: 'TOTP', rawText: '', error: '未识别到二维码' };
    }

    // 3. 检查二维码内容是否为 otpauth 协议
    const rawText = qrCode.data;
    if (rawText.startsWith('otpauth://')) {
      const { secret, account, type } = parseOtpauthUrl(rawText);
      return { secret, account, type, rawText, error: '' };
    } else {
      return { secret: '', account: '', type: 'TOTP', rawText, error: '二维码内容不是 otpauth 协议' };
    }
  } catch (e) {
    return { secret: '', account: '', type: 'TOTP', rawText: '', error: e.message || '解析异常' };
  }
}

/**
 * 解析 otpauth:// 协议字符串
 * @param {string} url otpauth 协议字符串
 * @returns {{secret: string, account: string, type: string}}
 */
function parseOtpauthUrl(url) {
  // 例：otpauth://totp/账户名?secret=密钥&issuer=xxx
  try {
    const u = new URL(url);
    const type = u.hostname.toUpperCase();
    const account = decodeURIComponent(u.pathname.slice(1));
    const params = new URLSearchParams(u.search);
    const secret = params.get('secret') || '';
    return { secret, account, type };
  } catch {
    return { secret: '', account: '', type: 'TOTP' };
  }
}

// 挂载到 window，供浏览器全局调用
window.parseQRCodeFromImage = parseQRCodeFromImage;
window.parseOtpauthUrl = parseOtpauthUrl; 